更新时间:2024-08-07 18:09
ANSI C是由美国国家标准协会(ANSI)及国际标准化组织(ISO)推出的关于C语言的标准。ANSI C 主要标准化了现存的实现, 同时增加了一些来自 C++ 的内容 (主要是函数原型) 并支持多国字符集 (包括备受争议的三字符序列)。 ANSI C 标准同时规定了 C 运行期库例程的标准。
1983 年, 美国国家标准协会(ANSI)委任一个委员会 X3J11 对 C 语言进行标准化。 经过长期艰苦的过程, 该委员会的工作于 1989 年 12 月 14 日正式被批准为ANSI X3.159-1989 并于 1990 年春天颁布。
一年左右以后, 该标准被接受为国际标准, ISO/IEC 9899:1990, 这个标准甚至在美国国内(在这里它被称作 ANSI/ISO 9899-1990 [1992])代替了早先的 X3.159。作为一个 ISO 标准, 它会以发行技术刊物和标准附录的形式不断更新。
1994年, 技术刊物 1 (TC1) 修正标准中 40 处地方, 多数都是小的修改或明确, 而标准附录 1 (NA1) 增加了大约 50 页的新材料, 多数是规定国际化支持的新库函数。1995 年, TC2 增加了一些更多的小修改。
该标准的一个重大修订,“C99”, 已经完成并于2000年的时候被接受。
该标准的数个版本,包括 C99 和原始的 ANSI 标准, 都包括了一个 “基本原理” (Rational), 解释它的许多决定并讨论了很多细节问题,包括本文中提及的某些内容。
American National Standards Institute(ANSI——美国国家标准学会) 由公司、政府和其他成员组成的自愿组织。它们协商与标准有关的活动,审议美国国家标准,并努力提高美国在国际标准化组织中的地位。此外,ANSI使有关通信和网络方面的国际标准和美国标准得到发展。ANSI是IEC和ISO的成员之一。
ANSI的地位:ANSI是一个准国家式的标准机构,它为那些在特定领域建立标准的组织提供区域许可,如电气电子工程师协会(IEEE)。ANSI是国际标准化委员会(ISO)和国际电工委员会(IEC)5个常任理事成员之一,4个理事局成员之一,参加79%的ISO/TC的活动,参加89%的IEC/TC活动。ANSI 是泛美技术标准委员会(COPANT)和太平洋地区标准会议(PASC)的成员。
C 的第一个标准是由ANSI发布的。虽然这份文档后来被国际标准化组织(ISO)采纳并且ISO发布的修订版也被ANSI采纳了,但名称ANSI C(而不是 ISO C)仍被广泛使用。一些软件开发者使用ISO C,还有一些使用 Standard C。
在1990年,ANSI C89标准被国际标准化组织(ISO)和国际电工委员会(IEC)采纳为国际标准,名叫ISO/IEC 9899:1990 - Programming languages -- C,有些人简称C90标准。因此,C89和C90通常指同一个标准,一般更常用C89这种说法。
在2000年3月,国际标准化组织(ISO)和国际电工委员会(IEC)采纳了第二个C语言标准,名叫ISO/IEC 9899:1999 - Programming languages -- C,简称C99标准。
在2011年12月,国际标准化组织(ISO)和国际电工委员会(IEC)采纳了第三个C语言标准,名叫ISO/IEC 9899:2011 - Information technology -- Programming languages -- C,简称C11标准。它是C程序语言的最新标准。
ANSI C被几乎所有广泛使用的编译器支持。而且多数C代码是在ANSI C基础上写的。任何仅仅使用标准C并且没有任何硬件依赖假设的代码实际上能保证在任何平台上用遵循C标准的编译器编译成功。如果没有这种预防措施,多数程序只能在一种特定的平台或特定的编译器上编译,例如,使用非标准库,例如图形用户界面库,或者有关编译器或平台特定的特性例如数据类型的确切大小和字节序。
选择编译
#if __STDC__
extern int getopt(int,char*const*,constchar*);
#else
extern int getopt();
在上面的例子,一个原型中使用了ANSI实现兼容的函数声明,而另一个使用了过时的非原形声明。它们在C99和C90中依旧是ANSI兼容的,但并不被鼓励使用。
Microsoft Visual C++ (C90. A few features of C99) (msvc doesn't support C99 at all. for example )
ARM RealView